#ifndef _ROTATEEULER_
#define _ROTATEEULER_

#include "Transformation.h"
#include <cassert>

// rotate about x axis
class RotateEulerX: public Transformation{
	public:
		RotateEulerX(Dof *angle);
		RotateEulerX(Dof *angle, char *mName);
		void applyGLTransform();
	private:
		Mat4d *getTransformMat();
		Mat4d *getDerivativeMat(Dof *d);
		Mat4d *getDerivativeMat(Dof *d1, Dof *d2);
};

// rotate about y axis
class RotateEulerY: public Transformation{
	public:
		RotateEulerY(Dof *angle);
		RotateEulerY(Dof *angle, char *mName);
		void applyGLTransform();
	private:
		Mat4d *getTransformMat();
		Mat4d *getDerivativeMat(Dof *d);
		Mat4d *getDerivativeMat(Dof *d1, Dof *d2);
};

// rotate about z axis
class RotateEulerZ: public Transformation{
	public:
		RotateEulerZ(Dof *angle);
		RotateEulerZ(Dof *angle, char *mName);
		void applyGLTransform();
	private:
		Mat4d *getTransformMat();
		Mat4d *getDerivativeMat(Dof *d);
		Mat4d *getDerivativeMat(Dof *d1, Dof *d2);
};

#endif
